
package miagetest.client.commands;

import dao.EntityAlreadyExistsException;
import dao.InexistantEntityException;
import entities.Client;
import entities.Commande;
import gestion.GestionnaireRemote;
import java.io.PrintStream;
import java.util.List;
import miagetest.client.interfaces.ShellCommand;
import miagetest.client.interfaces.ShellConstantes;
import miagetest.client.interfaces.ShellContext;

/**
 * Commandes liées aux clients
 * @author Alex
 */
public class ClientCommandImpl implements ShellCommand {

    private ShellContext context = null;

    public ClientCommandImpl(ShellContext context) {
        this.context = context;
    }

    @Override
    public String getName() {
        return "client";
    }

    @Override
    public String getUsage() {
        return "client <-remove idClient> <-create prenom nom> <-getCommandes idClient>";
    }

    @Override
    public String getShortDescription() {
        return "afficher la liste des clients, créer, supprimer un client ou afficher la liste des commandes d'un client";
    }

    @Override
    public void execute(String cmdline, PrintStream out, PrintStream err) {
        GestionnaireRemote gestionnaire = (GestionnaireRemote) context.getVar(ShellConstantes.GESTIONNAIRE);

        String[] cmdwords = cmdline.split(" ");

        if (cmdwords.length == 1) //pas de param
        {
            List<Client> clients = (List<Client>) gestionnaire.getAll(Client.class);
            for (Client client : clients) {
                out.println(client.getId() + " " + client.getPrenom() + " " + client.getNom());
            }
        }
        else if(cmdwords.length == 3)
        {
            String cmdParamName = cmdwords[1];
            String cmdParamValue = cmdwords[2];
            
            if (cmdParamName.equals("-getCommandes")) {
                try {
                    List<Commande> commandes = gestionnaire.getCommandesDuClient(Integer.parseInt(cmdParamValue));

                    for(Commande commande : commandes)
                        out.println(commande.getPkey() + " " + commande.getProduit().getNom() + " " + commande.getQuantity() + " " + commande.getDate());
                    
                } catch (InexistantEntityException e) {
                    err.println(e.toString());
                }
            }

            else if(cmdParamName.equals("-remove")) {
                try {
                    gestionnaire.supprimerClient(Integer.parseInt(cmdParamValue));
                    out.println("Client supprimé avec succès.");

                } catch (InexistantEntityException e) {
                    err.println(e.toString());
                }
            }
        }

        else if (cmdwords.length == 4) //est-ce que le param est bien renseigné
        {
            String cmdParamName = cmdwords[1];

            if (cmdParamName.equals("-create")) {
                try {
                    gestionnaire.creerClient(cmdwords[3], cmdwords[2]);
                    out.println("Votre client a été ajouté avec succès.");
                } catch (EntityAlreadyExistsException e) {
                    err.println(e.toString());
                }
            }
        }
    }
}
